/*


*/
use std::{cell::{Cell, RefCell}, string};

pub fn run1(){  
   let ss =Cell::new("大王叫我来巡山");
   let a =ss.get();
   println!("{0}",a);
   ss.set("小王叫我来巡山");
   let a =ss.get();
   println!("{a}");
}

pub  fn run2(){
     // 创建一个新的银行
    let bank = Bank::new();
    // 存款100元
    bank.deposit(100);
    // 取款50元，余额应该是50元
    assert!(bank.withdraw(50));
    assert_eq!(*bank.balance.borrow(), 50);
}
 


// 定义银行结构体
struct Bank {
    // 使用RefCell存储余额，因为余额是内部可变的
    balance: RefCell<i32>,
}

impl Bank {
    // 创建一个新的银行对象
    fn new() -> Bank {
        // 初始化余额为0
        Bank { balance: RefCell::new(0) }
    }

    // 存款
    fn deposit(&self, amount: i32) {
        // 获取内部可变引用
        let mut balance = self.balance.borrow_mut();
        // 修改余额
        *balance += amount;
    }

    // 取款
    fn withdraw(&self, amount: i32) -> bool {
        // 获取内部可变引用
        let mut balance = self.balance.borrow_mut();
        // 如果余额充足，则修改余额并返回true
        if *balance >= amount {
            *balance -= amount;
            true
        // 否则返回false
        } else {
            false
        }
    }
}


pub fn run(){
    //run1();
    run2();
}